// Package mq
// Author liuzhiyong
// Date 2023/11/22
// Description RocketMQ配置
package mq

import (
	"fmt"
	"gitee.com/liu_zy_developer/go_order_service/config"
	"github.com/apache/rocketmq-client-go/v2"
	"github.com/apache/rocketmq-client-go/v2/primitive"
	"github.com/apache/rocketmq-client-go/v2/producer"
)

var Producer rocketmq.Producer // 生产者

// Init 初始化生产者客户端
func Init() (err error) {
	// 创建生产者
	Producer, err = rocketmq.NewProducer(
		producer.WithNsResovler(primitive.NewPassthroughResolver([]string{config.Conf.RocketMqConfig.Addr})), // 配置nameserver
		//producer.WithNsResolver(primitive.NewPassthroughResolver(endPoint)),
		producer.WithRetry(2), // 生产者发送消息的重试次数
		producer.WithGroupName(config.Conf.RocketMqConfig.GroupId), // 生产者名称
	)
	if err != nil {
		fmt.Println(err)
		return err
	}
	// 启动生产者
	err = Producer.Start()
	if err != nil {
		fmt.Println(err)
		return
	}

	// 测试发送消息的代码
	// for i := 0; i < 10; i++ {
	// 	msg := &primitive.Message{
	// 		Topic: topic,
	// 		Body:  []byte("Hello RocketMQ Go Client! " + strconv.Itoa(i)),
	// 	}
	// 	res, err := p.SendSync(context.Background(), msg)

	// 	if err != nil {
	// 		fmt.Printf("send message error: %s\n", err)
	// 	} else {
	// 		fmt.Printf("send message success: result=%s\n", res.String())
	// 	}
	// }

	// err = p.Shutdown()
	// if err != nil {
	// 	fmt.Printf("shutdown producer error: %s", err.Error())
	// }
	return nil
}

// Exit 退出
func Exit() error {
	// 关闭生产者
	err := Producer.Shutdown()
	if err != nil {
		fmt.Printf("shutdown producer error: %s", err.Error())
	}
	return err
}

// RegisterCustomer 创建消费者, 订阅Topic
//func RegisterCustomer() error {
//	// 创建消费者, Push模式
//	c, _ := rocketmq.NewPushConsumer(
//		consumer.WithGroupName("order_srv_1"),
//		consumer.WithNsResovler(primitive.NewPassthroughResolver([]string{"127.0.0.1:9876"})), // 配置nameserver
//	)
//	// 订阅Topic
//	// 订阅订单超时Topic
//	err := c.Subscribe("xx_pay_timeout", consumer.MessageSelector{}, handler.OrderTimeouthandle)
//	if err != nil {
//		fmt.Println(err.Error())
//	}
//	err = c.Start()
//	if err != nil {
//		return nil
//	}
//	return nil
//}
